

  /**
   * 模块导出
   * 1. 默认导出
   *      - 一个模块只能有一个默认导出，使用 export default 关键字
   *      - 默认导出可以是任何类型，包括变量、函数、类、接口、类型别名等
   * 2. 命名导出
   *      - 使用 export 关键字导出多个成员
   *      - 可以使用 as 关键字给成员重命名
   *      - 允许你导出多个值，并且每个值都有一个明确的名称。
   * 3. 重命名导出
   *     - 使用 export {name1 as newName1, name2 as newName2} 语法重命名导出
   * 4. 从另一个模块导出
   *     - 使用 export {name1, name2} from '模块路径' 语法从另一个模块导出
   *     - 你可以将从其他模块导入的绑定重新导出，这可以用于创建一个集中的模块，该模块从多个地方导出。
   * 5. 从默认导出中导出
   *     - 使用 export {default} from '模块路径' 语法从默认导出中导出
   *     - 从另一个模块导入了一个默认导出，并希望将其作为命名导出重新导出
   * 6. 批量导出
   *     - 使用星号（*）可以导出一个模块的所有导出项，包括默认导出。
   * 7. 导出接口
   *     - 使用 export interface 关键字导出一个接口
   *     - 接口可以包含属性、方法、索引签名、call、construct、string索引、number索引、和symbol索引。
   *     - 在TypeScript中，你可以导出接口，这在JavaScript中相当于命名导出。
   * 8. 动态导出
   *     - 你可以在运行时动态导出值，这在某些情况下很有用。
   *     - 动态导入并不是真正的“导出”，但它是一种在运行时按需加载模块的方式。
   */

  // 1. 默认导出

  export default function (){}  // 导出
  import CustomName from './module.js'  // 导入

  // 2. 命名导出
  export const name = 'value'  // 导出
  export function foo(){}

  import {name, foo} from './module.js'  // 导入

  // 3. 重命名导出
  export {originalName as newName} // 导出
  import {oldName as newName} from './module.js'  // 导入

  // 4. 从另一个模块导出
  export { namedExport} from './module.js'  // 从另一个模块重新导出
  export * from './module.js'  // 导出所有命名导出

  // 5. 从默认导出中导出
  import defaultExport from './module.js'  // 导入默认导出
  export {defaultExport as newName}

  // 6. 批量导出
  export * from './module.js'  // 导出所有命名导出和默认导出
  export { default } from './module.js'  // 导出默认导出

  // 7. 导出接口 - 接口只能在ts文件中导出，不能在js文件中导出
  // export interface MyInterface {
  //   prop: string;
  // }

  // 8. 动态导出
  import('./module.js').then(module => {
    module.default()
  })

